package com.ysw.annotation;

import java.lang.annotation.*;

/**
 * soa服务提供者注解，用于标识一个接口为soa服务提供者，一个服务提供者必须满足以下条件:<br/>
 * <ol>
 *     <li>必须为接口类型</li>
 *     <li>接口必须以Service结尾</li>
 *     <li>接口必须添加{@linkplain SoaProvider}注解</li>
 *     <li>接口必须有直接实现类</li>
 *     <li>接口的直接实现类必须添加了{@linkplain org.springframework.stereotype.Service}注解</li>
 * </ol>
 * 服务提供者名称默认为接口名称去掉Service后缀，并且首字母为小写</br>
 * 接口方法名即为对外提供的soa接口方法名，区分大小写
 * 例如: <br/>
 * <code>
 *      @SoaProvider
 *     public interface SampleService {
 *         String sayHello(String name);
 *     }
 * </code>
 * 定义了一个soa服务，服务提供者名称为"sample"，该服务提供者提供了一个服务方法"sayHello"
 * 同时还该接口还必须有一个实现类，接口才能成功Soa服务提供者
 * <code>
 *     @Service
 *     public class SampleServiceImpl implements SampleService {
 *           @Override
 *          public String sayHello(String name) {
 *              return "hello: " + name;
 *          }
 *     }
 * </code>
 * @author ysw  2019/11/9 1:52 PM
 */
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Inherited
public @interface SoaProvider {

    /**
     * 用于指定soa服务提供者的名称，指定了该值以后将覆盖默认名称
     * @return
     */
    String value() default "";
}
